#include <unistd.h>
#include <fcntl.h>
#include <cstring>
#include <iostream>
using namespace std;

// fcntl（file control）是一个用于对文件描述符进行控制操作的系统调用接口。
// 它可以执行各种操作，如复制文件描述符、设置文件描述符标志和状态、锁定文件等。

// 设置文件为不阻塞状态,虽然可以在打开的时候设置
// 一个文件描述符默认是阻塞状态
void setNonBlock(int fd)
{
    int fl = fcntl(fd, F_GETFL); // F_GETFD：获取文件描述符标志值
    if (fl < 0)
    {
        std::cerr << "fcntl : " << strerror(errno) << std::endl;
        return;
    }
    fl = fcntl(fd, F_SETFL, fl | O_NONBLOCK); // O_NONBLOCK: 不阻塞状态
    if (fl < 0)
    {
        std::cerr << "fcntl : " << strerror(errno) << std::endl;
        return;
    }
}

void printLog()
{
    std::cout << "this is a log" << std::endl;
}

void download()
{
    std::cout << "this is a download" << std::endl;
}

void executeSql()
{
    std::cout << "this is a executeSql" << std::endl;
}